18-2 }狺仵

無論是要讀寫 ASCII 或二進制檔案,都必需先用 fopen 函數來開啟檔案,其使用語法如下:

fid = fopen(filename, permission)

其中 filename 表示欲讀寫的檔案名稱,permission 則表示欲對檔案進行的處理方式,可以是下列任一字串:

如果我們省略 fopen 的第二個輸入引數,則 permission 的預設值就是 ‘r’。

Hint
  • 在微軟公司的視窗作業系統下,permission 字串必需能夠分辨二進制檔案或 ASCII 檔案。例如,若要讀取二進制檔案,則 permission 字串必需是“rb”,欲知詳情,可在 MATLAB 指令視窗後,輸入「help fopen」。
  • 事實上,fopen 指令支援更多的 permission 字串,讀者可輸入 「help fopen」 得到完整的資訊。

fopen 函數傳回一個檔案辨識碼(File Identifier),通常是一個非負的整數,我們可用此辨識碼來對此檔案進行各種讀寫的處理。如果傳回的檔案辨識碼是 -1,則代表 fopen 無法開啟檔案,其原因可能是檔案不存在,或是使用者權限不足而無法開啟此檔案。若欲知無法開啟檔案的原因,可讓 fopen 傳回第二個引數來顯示錯誤訊息。為了安全起見,最好在每次使用 fopen 時,都測試其傳回的 fid 是否為有效值。在下列範例中,我們試著開啟一個不存在的檔案,並印出回傳的訊息:

Example 1: 18-檔案讀寫/fopen01.m[fid, message] = fopen('no_such_file', 'r'); fprintf('fid = %d\n', fid); fprintf('message = %s\n', message);fid = -1 message = No such file or directory

由上述範例可知當檔案不存在時,回傳的 fid 是 -1,同時 message 會包含相關的錯誤資訊。若開啟成功,則傳回的 fid 是一個大於 2 的整數,而且傳回的 message 是一個空字串,例如:

Example 2: 18-檔案讀寫/fopen02.m[fid, message] = fopen('fopen02.m', 'r'); fprintf('fid = %d\n', fid); fprintf('message = %s\n', message); fid = 5 message =

Hint
MATLAB 使用 fid=1 來代表「標準輸出」(Standard Output),fid=2 代表「標準錯誤輸出」(Standard Error),因此在使用這兩個 fid 的值時,可以不必使用 fopen 來開啟檔案。

一旦完成檔案的讀寫之後,可用 fclose 函數來關閉檔案,其使用語法如下:

status = fclose(fid);

若一切順利,fclose 傳回 0。若無法順利關閉檔案,則 fclose 傳回 -1。一般情況下,在完成檔案的讀寫後,即應使用 fclose 來關閉檔案,以免開啟檔案過多,造成系統資源的浪費。

若要一次關閉所有開啟的檔案,可用 fclose('all') 或是 fclose all。

Hint
開啟及關閉檔案都是比較耗時的函數,因此盡量不要將他們置於迴圈之中,以提高程式執行效率。


MATLAB程式設計:入門篇